// SAX Attribute List Interface.
// No warranty; no copyright -- use this as you will.
// $Id: AttributeList.java,v 1.1 2000/11/05 20:21:08 garypeskin Exp $
using System;
namespace Comzept.Genesis.Tidy.Xml.Sax
{
	
	/// <summary> Interface for an element's attribute specifications.</summary>
	/// <remarks>
	/// <blockquote>
	/// <em>This module, both source code and documentation, is in the
	/// Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
	/// </blockquote>
	/// 
	/// <p>This is the original SAX1 interface for reporting an element's
	/// attributes.  Unlike the new {@link org.Xml.Sax.Attributes Attributes}
	/// interface, it does not support Namespace-related information.</p>
	/// 
	/// <p>When an attribute list is supplied as part of a
	/// {@link org.Xml.Sax.DocumentHandler#startElement startElement}
	/// event, the list will return valid results only during the
	/// scope of the event; once the event handler returns control
	/// to the parser, the attribute list is invalid.  To save a
	/// persistent copy of the attribute list, use the SAX1
	/// {@link org.Xml.Sax.helpers.AttributeListImpl AttributeListImpl}
	/// helper class.</p>
	/// 
	/// <p>An attribute list includes only attributes that have been
	/// specified or defaulted: #IMPLIED attributes will not be included.</p>
	/// 
	/// <p>There are two ways for the SAX application to obtain information
	/// from the AttributeList.  First, it can iterate through the entire
	/// list:</p>
	/// 
	/// <code>
	/// public void startElement (String name, AttributeList atts) {
	///    for (int i = 0; i &lt; atts.getLength(); i++) {
	///       String name = atts.getName(i);
	///       String type = atts.getType(i);
	///       String value = atts.getValue(i);
	///      [...]
	///    }
	/// }
	/// </code>
	/// 
	/// <p>(Note that the result of getLength() will be zero if there
	/// are no attributes.)
	/// 
	/// <p>As an alternative, the application can request the value or
	/// type of specific attributes:</p>
	/// 
    /// <code>
	/// public void startElement (String name, AttributeList atts) {
	/// String identifier = atts.getValue("id");
	/// String label = atts.getValue("label");
	/// [...]
	/// }
    /// </code>
	/// 
	/// </remarks>
	/// <since> SAX 1.0
	/// </since>
	/// <author>  David Megginson, 
	/// <a href="mailto:sax@megginson.com">sax@megginson.com</a>
	/// </author>
	/// <version>  2.0
	/// </version>
	/// <seealso cref="Comzept.Genesis.Tidy.Xml.Sax.DocumentHandler.startElement startElement">
	/// </seealso>
	/// <seealso cref="Comzept.Genesis.Tidy.Xml.Sax.helpers.AttributeListImpl AttributeListImpl">
	/// </seealso>
    [Obsolete("This interface has been replaced by the SAX2 {@link org.Xml.Sax.Attributes Attributes} interface, which includes Namespace support.")]
	public interface AttributeList
	{
        /// <summary>
        /// Length
        /// </summary>
		int Length
		{
			get;
			
		}
		
		
		/// <summary> Return the name of an attribute in this list (by position).</summary>
		/// <remarks>
		/// <p>The names must be unique: the SAX parser shall not include the
		/// same attribute twice.  Attributes without values (those declared
		/// #IMPLIED without a value specified in the start tag) will be
		/// omitted from the list.</p>
		/// 
		/// <p>If the attribute name has a namespace prefix, the prefix
		/// will still be attached.</p>
		/// </remarks>
		/// 
		/// <param name="i">The index of the attribute in the list (starting at 0).
		/// </param>
		/// <returns> The name of the indexed attribute, or null
		/// if the index is out of range.
		/// </returns>
		/// <seealso cref="Length">
		/// </seealso>
		System.String getName(int i);
		
		
		/// <summary> Return the type of an attribute in the list (by position).</summary>
		/// <remarks>
		/// <p>The attribute type is one of the strings "CDATA", "ID",
		/// "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY", "ENTITIES",
		/// or "NOTATION" (always in upper case).</p>
		/// 
		/// <p>If the parser has not read a declaration for the attribute,
		/// or if the parser does not report attribute types, then it must
		/// return the value "CDATA" as stated in the XML 1.0 Recommentation
		/// (clause 3.3.3, "Attribute-Value Normalization").</p>
		/// 
		/// <p>For an enumerated attribute that is not a notation, the
		/// parser will report the type as "NMTOKEN".</p>
		/// </remarks>
		/// 
		/// <param name="i">The index of the attribute in the list (starting at 0).
		/// </param>
		/// <returns> The attribute type as a string, or
		/// null if the index is out of range.
		/// </returns>
		/// <seealso cref="Length">
		/// </seealso>
		/// <seealso cref="Type(java.lang.String)">
		/// </seealso>
		System.String getType(int i);
		
		
		/// <summary> Return the value of an attribute in the list (by position).</summary>
		/// <remarks>
		/// <p>If the attribute value is a list of tokens (IDREFS,
		/// ENTITIES, or NMTOKENS), the tokens will be concatenated
		/// into a single string separated by whitespace.</p>
		/// </remarks>
		/// 
		/// <param name="i">The index of the attribute in the list (starting at 0).
		/// </param>
		/// <returns> The attribute value as a string, or
		/// null if the index is out of range.
		/// </returns>
		/// <seealso cref="Length">
		/// </seealso>
		/// <seealso cref="GetValue(string)">
		/// </seealso>
		System.String getValue(int i);
		
		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <returns></returns>
		System.String GetType(System.String name);
		
		
		/// <summary> Return the value of an attribute in the list (by name).
		/// 
		/// <p>The return value is the same as the return value for
		/// getValue(int).</p>
		/// 
		/// <p>If the attribute name has a namespace prefix in the document,
		/// the application must include the prefix here.</p>
		/// 
		/// </summary>
        /// <param name="name">The name of the attribute in the list.
		/// </param>
		/// <returns> The attribute value as a string, or null if
		/// no such attribute exists.
		/// </returns>
		/// <seealso cref="Value(int)">
		/// </seealso>
		System.String GetValue(System.String name);
	}
	
	// end of AttributeList.java
}